package offer;

import java.util.ArrayList;
import java.util.List;

public class offer_0029 {
    public int[] spiralOrder(int[][] matrix) {
        int m=matrix.length;
        if(m==0) return new int[0];
        int n=matrix[0].length;
        int [] list=new int[m*n];
        int count=0;
        int num=((m>n)?n:m)/2;
        int startx=0;
        int starty=0;
        int offset=1;
        for(int l=0;l<num;++l){
            int i=startx;
            int j=starty;
            for(;j<starty+n-offset;++j){
                list[count++]=matrix[i][j];
            }
            for(;i<startx+m-offset;++i){
                list[count++]=matrix[i][j];
            }
            for(;j>starty;--j){
                list[count++]=matrix[i][j];
            }
            for(;i>startx;--i){
                list[count++]=matrix[i][j];
            }
            startx+=1;
            starty+=1;
            offset+=2;
        }

        if(m<n&&m%2==1){
            for(int i=0;i<n-num*2;++i){
                list[count++]=matrix[startx][starty+i];
            }
        }
        if(m>n&&n%2==1){
            for(int i=0;i<m-num*2;++i){
                list[count++]=matrix[startx+i][starty];
            }
        }
        if(m==n&&m%2==1){
            list[count++]=matrix[m/2][n/2];
        }
        return list;
    }
}
